package com.sysef.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import com.sysef.exception.*;
import com.sysef.modelo.*;
import com.sysef.util.*;

public class DAOCotizacion extends BaseDAO {
	
	
	// insertamos cotizacion
	public BeanCotizacion insertarCotizacion( BeanCotizacion  objBeanCotizacion) throws DAOExcepcion, SQLException {
		String query = "insert into tb_Cotizacion(fechaRegistro,fechaVcto,importeSubtotal,importeIGV,importeDsto,importeTotal,porcIGV) values (?,?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		String fechaRegistro1 = "";
		String fechaVencimiento = "";
		
		try {
			con = ConexionBD.obtenerConexion();
			
			if (con.getAutoCommit() )
				con.setAutoCommit( false );
			
			// Formateando la Fecha
			if (objBeanCotizacion.getFechaRegistroCotizacion() != null && objBeanCotizacion.getFechaValidezCotizacion() != null) {
				java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
						"yyyy-MM-dd HH:mm:ss");
				 fechaRegistro1 = sdf.format(objBeanCotizacion.getFechaRegistroCotizacion());
				 fechaVencimiento= sdf.format(objBeanCotizacion.getFechaValidezCotizacion());
			}
						
			stmt = con.prepareStatement(query);
			stmt.setString(1, fechaRegistro1);
			stmt.setString(2, fechaVencimiento);
			stmt.setInt(3, objBeanCotizacion.getIntSubTotalCotizacion());
			stmt.setInt(4, objBeanCotizacion.getIntIGVCotizacion());
			stmt.setInt(5, objBeanCotizacion.getIntDescuentoCotizacion());
			stmt.setInt(6, objBeanCotizacion.getIntTotalCotizacion());

			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			objBeanCotizacion.setIntIdCotizacion(id);		
			

			con.commit();

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			con.rollback();
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return objBeanCotizacion;
	}

	public BeanCotizacion obtenerCotizacionId(int idCotizacion) throws DAOExcepcion {
		
		BeanCotizacion objBeanCotizacion = new BeanCotizacion();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select * from tb_Cotizacion where idCotizacion =?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCotizacion);
			rs = stmt.executeQuery();
			if (rs.next()) {
				objBeanCotizacion.setIntIdCotizacion("idCotizacion");
				objBeanDiaCampo.setIntIdDiaCampo(rs.getInt("idDiaCampo"));
				objBeanDiaCampo.setDtFechaReserva(rs.getDate("fechaReserva"));
				objBeanDiaCampo.setIntNroPersonas(rs.getInt("nroPersonas"));
				objBeanDiaCampo.setDtFechaRegistro(rs.getDate("fechaRegistro"));
				
				//---------CLUB----------------
				//Declaramos una variable que reciba el codigo de club
				Integer intIdClub;
				//Seteamos la variable con lo recibido en la consulta
				intIdClub  = rs.getInt("idClub");
				//Creamos un objeto tipo BeanClub
				BeanClub  objBeanClub = new BeanClub();
				//Seteamos el idClub dentro del objeto.
				objBeanClub.setIntIdClub(intIdClub);
				//Seteamos el objeto para el objBeanDiaCampo
				objBeanDiaCampo.setObjBeanClub(objBeanClub);
				
				
				//---------	ESTADO----------------
				//Declaramos una variable que reciba el codigo del estado
				Integer intIdEstado;
				//Seteamos la variable con lo recibido en la consulta
				intIdEstado  = rs.getInt("idEstado");
				//Creamos un objeto tipo BeanEstado
				BeanEstado  objBeanEstado = new BeanEstado();
				//Seteamos el idEstado dentro del objeto.
				objBeanEstado.setIntIdEstado(intIdEstado);
				//Seteamos el objeto para el objBeanDiaCampo
				objBeanDiaCampo.setObjBeanEstado(objBeanEstado);	
				
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return objBeanDiaCampo;
	}
}

